/**
 * 
 */
package systole.domain.persons;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import systole.domain.analysis.Analysis;
import systole.domain.clinicalInformation.ClinicalInformation;
import systole.domain.clinicalInformation.FamilyPatientBackground;
import systole.domain.clinicalInformation.HabitPatient;
import systole.domain.clinicalInformation.MedicinePatient;
import systole.domain.clinicalInformation.PathologyPatient;
import systole.domain.clinicalInformation.SportPatient;
import systole.domain.clinicalInformation.SurgeryPatient;
import systole.domain.persons.profession.Profession;
import systole.domain.signals.RawSignal;

/**
 * @author juan
 * 
 */
public class Patient extends Person {

    /**
     *
     */
    private static final long serialVersionUID = -8717918671165777318L;
    private Date lastMedicVisit;
    private Boolean underMedicalObservation;
    private ClinicalHistoryProxy clinicalHistoryProxy;
    private Profession profession;
    private Medic medic;
    private HabitPatient habitPatient;
    private Collection<SportPatient> sportsPatient = new ArrayList<SportPatient>();
    private Collection<Analysis> analysis = new ArrayList<Analysis>();
    private Collection<MedicinePatient> medicinesPatient = new ArrayList<MedicinePatient>();
    private Collection<PathologyPatient> pathologiesPatient = new ArrayList<PathologyPatient>();
    private Collection<RawSignal> rawsignals = new ArrayList<RawSignal>();
    private Collection<SurgeryPatient> surgeriesPatient = new ArrayList<SurgeryPatient>();
    private Collection<ClinicalInformation> clinicalInformation = new ArrayList<ClinicalInformation>();
    private Collection<FamilyPatientBackground> familyPatientBackgrounds = new ArrayList<FamilyPatientBackground>();

    /**
     * 
     */
    public Patient() {
        super();
        this.clinicalHistoryProxy = new ClinicalHistoryProxy(this);
    }


    /**
     * @return the medic
     */
    public Medic getMedic() {
        return medic;
    }

    /**
     * @param medic
     *            the medic to set
     */
    public void setMedic(Medic medic) {
        this.medic = medic;
    }

    /**
     * @return the habitPatient
     */
    public HabitPatient getHabitPatient() {
        return habitPatient;
    }

    /**
     * @param habitPatient
     *            the habitPatient to set
     */
    public void setHabitPatient(HabitPatient habitPatient) {
        this.habitPatient = habitPatient;
    }

    /**
     * @return the sportsPatient
     */
    public Collection<SportPatient> getSportsPatient() {
        return sportsPatient;
    }

    /**
     * @param sportsPatient
     *            the sportsPatient to set
     */
    public void setSportsPatient(Collection<SportPatient> sportsPatient) {
        this.sportsPatient = sportsPatient;
    }

    /**
     * @return the analysis
     */
    public Collection<Analysis> getAnalysis() {
        return analysis;
    }

    /**
     * @param analysis
     *            the analysis to set
     */
    public void setAnalysis(Collection<Analysis> analysis) {
        this.analysis = analysis;
    }

    /**
     * @return the medicinesPatient
     */
    public Collection<MedicinePatient> getMedicinesPatient() {
        return medicinesPatient;
    }

    /**
     * @param medicinesPatient
     *            the medicinesPatient to set
     */
    public void setMedicinesPatient(Collection<MedicinePatient> medicinesPatient) {
        this.medicinesPatient = medicinesPatient;
    }

    /**
     * @return the pathologiesPatient
     */
    public Collection<PathologyPatient> getPathologiesPatient() {
        return pathologiesPatient;
    }

    /**
     * @param pathologiesPatient
     *            the pathologiesPatient to set
     */
    public void setPathologiesPatient(Collection<PathologyPatient> pathologiesPatient) {
        this.pathologiesPatient = pathologiesPatient;
    }

    /**
     * @return the rawsignals
     */
    public Collection<RawSignal> getRawsignals() {
        return rawsignals;
    }

    /**
     * @param rawsignals
     *            the rawsignals to set
     */
    public void setRawsignals(Collection<RawSignal> rawsignals) {
        this.rawsignals = rawsignals;
    }

    /**
     * @return the surgeriesPatient
     */
    public Collection<SurgeryPatient> getSurgeriesPatient() {
        return surgeriesPatient;
    }

    /**
     * @param surgeriesPatient
     *            the surgeriesPatient to set
     */
    public void setSurgeriesPatient(Collection<SurgeryPatient> surgeriesPatient) {
        this.surgeriesPatient = surgeriesPatient;
    }

    /**
     * @return the clinicalInformation
     */
    public Collection<ClinicalInformation> getClinicalInformation() {
        return clinicalInformation;
    }

    /**
     * @param clinicalInformation
     *            the clinicalInformation to set
     */
    public void setClinicalInformation(
            Collection<ClinicalInformation> clinicalInformation) {
        this.clinicalInformation = clinicalInformation;
    }

    /**
     * @return the familyPatientBackgrounds
     */
    public Collection<FamilyPatientBackground> getFamilyPatientBackgrounds() {
        return familyPatientBackgrounds;
    }

    /**
     * @param familyPatientBackgrounds
     *            the familyPatientBackgrounds to set
     */
    public void setFamilyPatientBackgrounds(
            Collection<FamilyPatientBackground> familyPatientBackgrounds) {
        this.familyPatientBackgrounds = familyPatientBackgrounds;
    }

    /**
     * @return the profession
     */
    public Profession getProfession() {
        return profession;
    }

    /**
     * @param profession
     *            the profession to set
     */
    public void setProfession(Profession profession) {
        this.profession = profession;
    }

    /**
     * @param lastMedicVisit the lastMedicVisit to set
     */
    public void setLastMedicVisit(Date lastMedicVisit) {
        this.lastMedicVisit = lastMedicVisit;
    }

    /**
     * @return the lastMedicVisit
     */
    public Date getLastMedicVisit() {
        return lastMedicVisit;
    }

    /**
     * @param underMedicalObservation the underMedicalObservation to set
     */
    public void setUnderMedicalObservation(Boolean underMedicalObservation) {
        this.underMedicalObservation = underMedicalObservation;
    }

    /**
     * @return the underMedicalObservation
     */
    public Boolean getUnderMedicalObservation() {
        return underMedicalObservation;
    }

    /**
     * @return the clinicalHistoryProxy
     */
    public ClinicalHistoryProxy getClinicalHistoryProxy() {
        return clinicalHistoryProxy;
    }
}
